package com.greate.community.service;

import com.greate.community.entity.UserTag;
import com.greate.community.mapper.UserTagMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * 用户标签服务
 * 负责用户标签的管理和维护
 */
@Service
public class UserTagService {

    private static final Logger logger = LoggerFactory.getLogger(UserTagService.class);

    @Autowired
    private UserTagMapper userTagMapper;

    /**
     * 添加或更新用户标签
     * @param userId 用户ID
     * @param tagName 标签名称
     * @param score 行为分数（用于调整标签权重）
     * @return 操作是否成功
     */
    public boolean addOrUpdateTag(int userId, String tagName, double score) {
        if (userId <= 0 || tagName == null || tagName.trim().isEmpty()) {
            return false;
        }

        try {
            // 查找是否已存在该标签
            UserTag existingTag = userTagMapper.selectUserTagByTagName(userId, tagName);
            
            if (existingTag != null) {
                // 已存在，更新权重（累加一定比例的分数）
                double newWeight = existingTag.getWeight() + score * 0.1;
                userTagMapper.updateWeight(existingTag.getId(), newWeight);
            } else {
                // 不存在，创建新标签
                UserTag userTag = new UserTag();
                userTag.setUserId(userId);
                userTag.setTagName(tagName);
                userTag.setWeight(score * 0.5); // 初始权重为行为分数的一半
                userTag.setCreateTime(new Date());
                userTag.setUpdateTime(new Date());
                userTagMapper.insertUserTag(userTag);
            }
            return true;
        } catch (Exception e) {
            logger.error("添加或更新用户标签失败", e);
            return false;
        }
    }

    /**
     * 获取用户的标签列表
     * @param userId 用户ID
     * @return 用户标签列表
     */
    public List<UserTag> getUserTags(int userId) {
        return userTagMapper.selectUserTagsByUserId(userId);
    }

    /**
     * 获取用户的热门标签
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 热门标签列表
     */
    public List<UserTag> getHotUserTags(int userId, int limit) {
        return userTagMapper.selectHotUserTags(userId, limit);
    }

    /**
     * 删除用户标签
     * @param tagId 标签ID
     * @return 操作是否成功
     */
    public boolean deleteUserTag(int tagId) {
        try {
            userTagMapper.deleteUserTag(tagId);
            return true;
        } catch (Exception e) {
            logger.error("删除用户标签失败", e);
            return false;
        }
    }
} 